const shell = require('shelljs')
const fs = require('fs')

const handleCmd=exports.handleCmd=(cmdCommand)=> {
    //执行单行命令
    let promise = new Promise((resolve, reject) => {
        let flag = false
        let output=''
        // console.log(cmdCommand)
        let child = shell.exec(cmdCommand, {async: true}, function (err, stdout, stderr) {
            flag = true //说明进入进程回调
            if (!err) {
                console.log('stdout', stdout)
                console.log('stderr', `----${stderr}---`)
                output = stderr ? stderr : stdout
            }
        })
        child.on('close',(err)=>{
            if(err){
                //    报错
                if(err.code === 'ENOENT'){
                    reject('handleCmd方法执行命令错误:文件不存在')
                }
                reject('handleCmd方法执行命令错误')
            }else{
                resolve({
                    success:true,
                    msg:output
                })
            }
            console.log('hhadncccccccccccccc',err)
        })
    })
    return promise
}

const handleCmdLines= exports.handleCmdLines=(cmdCommandList)=> {
//    执行多行命令-spawn
    const cmdCommand = cmdCommandList.join('&&')
    return handleCmd(cmdCommand)
}

function startCmdExeAndOperate(command) {
    const cmd = `start cmd /K "${command}"`
    return handleCmd(cmd)
}

// exports.startTomcat=(cmdCommandList)=>{
// //    tomcat启动时会开启脱离node进程的新进程，所以单独处理
//     const cmdCommand = cmdCommandList.join('&&')
//     console.log(cmdCommand)
//     //执行单行命令
//     let promise = new Promise((resolve, reject) => {
//         debugger
//         let flag = false
//         shell.exec('tasklist | findstr "imagename eq CndeJavaw.exe"', function (error, stdout, stderr) {
//             if (!error) {
//                 debugger
//                 resolve({
//                     success: true,
//                     msg: '已存在启动的cnde(tomcat)进程！'
//                 })
//                 return
//             }
//         })
//         let child = shell.exec(cmdCommand, {async: true}, function (code, stdout, stderr) {
//             debugger
//             flag = true //说明进入进程回调
//             if (code) {
//                 //    报错
//                 console.log('handleCmd方法执行命令错误')
//                 reject('handleCmd方法执行命令错误')
//             } else {
//                 // console.log('stdout',stdout)
//                 // console.log('stderr',`----${stderr}---`)
//                 const output = stderr ? stderr : stdout
//                 resolve({
//                     success: true,
//                     msg: output
//                 })
//             }
//         })
//
//         //第一次启动tomcat时，不会进入上面的回调函数，在这里判断CndeJavaw.exe是否启动
//         let time = 0
//         let intervalId = setInterval(() => {
//             // 循环执行的代码
//             time = time + 1000
//             if (!flag) {
//                 //   如果没有进入进程回调，说明tomcat另起进程并启动成功
//                 let checkJavaw = shell.exec('tasklist | findstr "imagename eq CndeJavaw.exe"', function (error, stdout, stderr) {
//                     if (!error) {
//                         debugger
//                         clearInterval(intervalId) // 停止定时器
//                         console.log('stdout', typeof stdout)
//                         resolve({
//                             success: true,
//                             msg: 'Tomcat进程已启动'
//                         })
//                     } else if (time > 10000) {
//                         debugger
//                         clearInterval(intervalId) // 停止定时器
//                         reject('Tomcat启动超时')
//                     }
//                 })
//             }
//         }, 1000)
//
//     })
//     return promise
// }

exports.addReg=()=>{
//    增加环境变量，修改注册表
    const nvmHomeValue = 'C:\\Users\\Administrator\\AppData\\Roaming\\nvm';
    const nvmSymlinkValue = 'C:\\Program Files\\nodejs';

    return handleCmd(`reg.exe query "HKCU\\Environment" /v PATH`).then(res=>{
        let pathValue=''
        if(res.msg.includes('REG_SZ')){
            pathValue = res.msg.match(/REG_SZ\s+(.*)/)[1];
        }else if(res.msg.includes('REG_EXPAND_SZ')){
            pathValue = res.msg.match(/REG_EXPAND_SZ\s+(.*)/)[1];
        }

        // let pathValue = res.msg.match(/REG_EXPAND_SZ\s+(.*)/)[1];
// return pathValue
        if(!pathValue.includes(nvmHomeValue) && !pathValue.includes('%NVM_HOME%')){
            pathValue+='%NVM_HOME%;'
        }
        if(!pathValue.includes(nvmSymlinkValue) && !pathValue.includes('%NVM_SYMLINK%')){
            pathValue+='%NVM_SYMLINK%;'
        }
        // 构建要执行的命令
        const command = [`reg add HKCU\\Environment /v NVM_HOME /d "${nvmHomeValue}" /f`,`reg add HKCU\\Environment /v NVM_SYMLINK /d "${nvmSymlinkValue}" /f`,
            `setx PATH "${pathValue}"`];

        return handleCmdLines(command)
    })


}



